﻿using System;
using System.Collections.Generic;
using System.Text;

namespace daBase.Analyser
{
    // Объекты и анализаторы
    using Objects;
    using Objects.Safe;

    /// <summary>
    /// Распознающий анализатор
    /// </summary>
    public abstract class LayerAnalyser : BaseAnalyser
    {
        // Поля анализатора
        protected string file;

        /// <summary>
        /// Ошибка анализа
        /// </summary>
        protected void Panic()
        {
            throw new DanalyserError("kernel panic!");
        }

        /// <summary>
        /// Добавление ошибки
        /// </summary>
        /// <param name="Line">номер строки, содержащей ошибку</param>
        /// <param name="MetaTags">мета данные</param>
        /// <param name="Hint">подсказка по устранению ошибки</param>
        protected void AddError(int Line, string Code, SafeDictionary<string, string> MetaTags)
        {
            AnalyserDefaultSettingsAttribute attr = (Attribute.GetCustomAttribute(this.GetType(), typeof(AnalyserDefaultSettingsAttribute)) as AnalyserDefaultSettingsAttribute);
            AddError(attr.Message, attr.Level, file, Line, Code, MetaTags, attr.Hint);
        }

        /// <summary>
        /// Добавление ошибки
        /// </summary>
        /// <param name="File">файл, содержащий ошибку</param>
        /// <param name="Line">номер строки, содержащей ошибку</param>
        /// <param name="MetaTags">мета данные</param>
        /// <param name="Hint">подсказка по устранению ошибки</param>
        protected void AddUndefinedError(string File, int Line, string Code, SafeDictionary<string, string> MetaTags)
        {
            AddError("Неизвестная ошибка!", 100, File, Line, Code, MetaTags, "Неизвестная ошибка!");
        }
    }
}
